#pragma once
template<class T>
class IQueue {
public:
	IQueue() = default;
	~IQueue() = default;

	virtual bool empty() const = 0;
	virtual bool full() const = 0;
	virtual int size() const = 0;
	virtual bool push(T&& element) = 0;
	virtual bool push(const T& element) = 0;
	virtual bool pop() = 0;
	virtual bool pop(T& element) = 0;
	virtual const T& front() const = 0;
	virtual const T& back() const = 0;
	virtual T& front() = 0;
	virtual T& back() = 0;
};
